"use strict";
/**
 * 接口
 * TS 的核心原则之一是对值所具有的结构进行类型检查
 * 在 TS 中，接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
 */
function printLabel(labelledObj) {
    console.log(labelledObj.label);
}
// 类型检查器不会去检查属性的顺序，只要相应的属性存在并且类型也是对的就可以
var myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
function createSquare(config) {
    var newSquare = { color: "white", area: 100 };
    if (config.color) {
        newSquare.color = config.color;
    }
    if (config.width) {
        newSquare.area = config.width * config.width;
    }
    return newSquare;
}
var mySquare = createSquare({ color: "black" });
// 你可以通过一个赋值对象字面量来构造一个 Point。赋值后，x 和 y 的值再也不能改变了
var p1 = { x: 10, y: 20 };
// p1.x = 5 错误
// TS 拥有 ReadonlyArray<T> 类型，他与 Array<T> 相似，只是把所有可变方法去掉了，因此可以确保数组创建后再也不能被修改
var a = [1, 2, 3, 4];
var ro = a;
// ro[0] = 12; // error!
// ro.push(5); // error!
// ro.length = 100; // error!
// a = ro; // error!
// readonly 和 const 区别
// 什么时候使用 readonly？ 什么时候应该使用 const
// 最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 
// 做为变量使用的话用 const，若做为属性则使用readonly。
